﻿using System.Collections.Generic;

namespace LeRenard.Libraries.PlatformInspection.InfoNodes
{
    /// <summary>
    /// Defines an interface for an object that contains information on a certain subject.
    /// </summary>
    public interface IInfoNode
    {
        /// <summary>
        /// Gets the <see cref="InfoNodeEmptyValueDisplayStrategy"/> when the <see cref="Value"/> is empty or null.
        /// </summary>
        InfoNodeEmptyValueDisplayStrategy DisplayStrategy { get; }

        /// <summary>
        /// Gets the inner (underlying) <see cref="InfoNode"/>s, if there are <see cref="InfoNode"/>s available.
        /// </summary>
        IEnumerable<InfoNode> InnerInfoNodes { get; }  

        /// <summary>
        /// Determines whether this <see cref="InfoNode"/> has any <see cref="InnerInfoNodes"/>.
        /// </summary>
        bool HasInnerInfoNodes { get; }

        /// <summary>
        /// Gets the name (or title, subject) of the info the <see cref="InfoNode"/> provides.
        /// </summary>
        string Name { get; }

        /// <summary>
        /// Gets the value of the <see cref="InfoNode"/>.
        /// </summary>
        string Value { get; }

        /// <summary>
        /// Determines whether this <see cref="InfoNode"/> contains a <see cref="Value"/>.
        /// </summary>
        bool HasValue { get; }
    }
}
